// pages/palying/playing.js
let {
  getMicUrl,getLyric
} = require("../../utils/request.js")
Page({

  /**
   * 页面的初始数据
   */
  data: {
    // 播放索引
    playIndex: 0,
    // 当前播放的信息对象
    musicObj: {},
    // 播放列表
    playList: [],
    // 是否播放
    isPlay: false,
    // 当前音乐的播放路径
    musicUrl:null,
    // 下一曲或上一曲
    isNext:true,
    // 当前播放状态
    status:2,
    // 播放时间
    duration:"00:00",
    // 当前播放时长
    currentTime:"00:00",
    // 当前播放时长所占百分比
    percent:0,
    // 歌词
    lyric:[],
    // 当前播放歌词的索引
    lyricIndex:0

    
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    let playList = wx.getStorageSync('playList') || []
    console.log(playList);
    this.setData({
      playList: playList
    }, () => {
// 获取当前的播放索引
      let playIndex = options.playIndex;
// 获取是否随机播放
      let isRandom = options.isRandom;
      if (isRandom == "true") {
        console.log("随机播放");
        // 随机播放
        this.randomPlay()
        return;
      }
      // 判断页面参数是否携带有播放索引
      if (playIndex == undefined) {
        playIndex = 0
      }
      this.setData({
        playIndex
      }, () => {
        this.getMusicMsg();
      })
    })


  },
  // 获取当前播放的音乐信息
  async getMusicMsg() {
    let music = this.data.playList[this.data.playIndex];
    console.log(music);
    // 用来存放歌手名称
    let ar = [];
    music.ar.forEach(item => {
        ar.push(item.name)
    })
    let musicObj = {
      name: music.name,
      ar: ar.join("、"),
      picUrl: music.al.picUrl,
      id: music.id
    }
    console.log(musicObj);
    // 请求歌词
    let res = await getLyric(music.id)
    // console.log(res.data.lrc.lyric);
    this.filterLyric(res.data.lrc.lyric)
    this.setData({
      musicObj
    },()=>{
      this.getMicUrl()
    })
  },
  // 获取音乐路径
  async getMicUrl(){
  
      let res = await getMicUrl(this.data.musicObj.id);
      // console.log(res.data.data[0].url);
      if(res.data.data[0].url == null){
        wx.showToast({
          title: '该歌曲暂不能播放',
          icon:'none'
        })
        if(this.data.isNext){
          this.nextPlay()
        }else{
          this.prePlay()
        }
        return
      }
      this.setData({
        musicUrl:res.data.data[0].url
      },()=>{
        this.getMusicManager()
      })
  },
  // 创建音频控制对象
  getMusicManager(){
    // 创建音频对象并赋值到实例中musicManager属性上
    this.musicManager = wx.getBackgroundAudioManager();
    // console.log(this.musicManager);
    // 设置播放地址
    this.musicManager.title = this.data.musicObj.name
    this. musicManager.src = this.data.musicUrl
    this.musicManager.singer = this.data.musicObj.ar;
    this.musicManager.coverImgUrl = this.data.musicObj.picUrl;
    this.musicManager.onCanplay(()=>{
      // 获取音频长度
      this.getDuration();
      this.setData({
        isPlay:true
      })
    })
    // 监听音频暂停事件
    this.musicManager.onPause(()=>{
      this.setData({
        isPlay:false
      })
    })
    // 监听播放事件
    this.musicManager.onPlay(()=>{
      this.setData({
        isPlay:true
      })
    })
    // 监听到背景音频自然播放结束事件
    this.musicManager.onEnded(()=>{
      if(this.data.status == 0){
       //    表示随机播放
       this.ranDomPlay();
      }else if(this.data.status==1){
       //  表示单曲循环
           this.getMusicUrl();
      }else{
       //   顺序播放
        this.nextPlay();
      }
  });
    // 监听背景音频进度更新时间
    this.musicManager.onTimeUpdate(()=>{
      // console.log();
      // 获取当前播放进度（s）
      let currentTime = this.musicManager.currentTime
      // 获取当前所播放歌词的索引
      // console.log(this.data.lyric[0].time);
      let index = this.data.lyric.findIndex((item,index)=>{
        return currentTime>=item.time && currentTime<this.data.lyric[index+1].time
      })
      console.log(index);
      this.setData({
        lyricIndex:index
      })
      // 计算当前播放的百分比
      let percent =  currentTime/this.musicManager.duration * 100;
      // console.log(percent);
      // 分钟四舍五入
      currentTime = Math.round(currentTime);
      // 计算获取歌曲的分钟
      let m = Math.floor(currentTime/60);
      m = m < 10 ?"0" + m :m;
      // 获取秒
      let s =currentTime%60;
      s = s < 10 ?"0" + s:s
      // 组合
      this.setData({
        currentTime:m+":"+s,
        percent:percent
      })
    })
  },
  getplayIndexx(e) {
    console.log(e.detail.playIndex);
    this.setData({
      playIndex: e.detail.playIndex
    }, () => {
      this.getMusicMsg()
    })
  },
  // 随机播放
  randomPlay() {
    let playIndex = Math.random() * this.data.playList.length;
    playIndex = Math.floor(playIndex);
    // console.log(playIndex);
    this.setData({
      playIndex
    }, () => {
      this.getMusicMsg()
    })
  },
  // 子组件触发的事件
  getIsPlay(e) {
    // console.log(e.detail.isplay);
    this.setData({
      isPlay: e.detail.isplay
    })
    console.log(e.detail.isplay);
    if( e.detail.isplay){
      this.musicManager.play()
    }else{
      this.musicManager.pause()
    }


  },
  // 下一首
  nextPlay(){
    console.log("播放下一首");
    this.data.playIndex++;
    if(this.data.playIndex >= this.data.playList.length){
      this.data.playIndex = 0
    }
    this.setData({
    playIndex:this.data.playIndex,
    isNext:true
    },()=>{
      this.getMusicMsg()
    })
  },
  // 播放上一曲
  prePlay(){
    console.log("播放上一首");
    // 判断是否为第一首歌曲
    if(this.data.playIndex == 0){
      // 播放索引位播放列表的最后一首的索引
      this.data.playIndex = this.data.playList.length-1
    }else{
      this.data.playIndex--;
    }
    this.setData({
      playIndex:this.data.playIndex,
      isNext:false
    },()=>{
      this.getMusicMsg()
    })
  },
  // 获取播放状态
  getStatus(e){
    console.log(e);
  },
  // 获取音频长度
  getDuration(){
    setTimeout(()=>{
    // console.log(this.musicManager.duration);
    // 获取音频播放时长
    let duration = this.musicManager.duration
    duration = Math.round(duration)
    // console.log(duration/60);
    // 计算得到的分钟
    let m = Math.floor(duration/60)
    // console.log(m);
    m = m>10?"0"+m:m;
    // 获取秒
    let s = duration%60
    // console.log(s);
    s = s < 10?"0"+s:s;
      // 组合得到 00:00
      // console.log(m+":"+s);
      this.setData({
      duration:m+":"+s
      })
    })
  },
  // 处理歌词信息
  filterLyric(lyric){
    // console.log(lyric);
    // 将歌词切割成数组  \n为切割单位
    lyric = lyric.split("\n")
    // console.log(lyric);
    // 删除数组中的最后一个元素
    lyric.pop();
    // console.log(lyric);
    // 创建一个新的数组来存放获得新的数据
    let newLyric = [];
    lyric.forEach(item=>{
      // 获取 当前播放歌曲的分钟
      let m = item.substr(1,2)*60
      // console.log(m);
      // 获取当前播放歌词的秒
      let s = item.substr(4,5)
      // console.log(s);
      // 获取当前播放歌词的毫秒
      let ms = item.substr(7,3);
     ms+=""
    //  去掉"]"
     if(ms[ms.length-1]=="]"){
         ms = ms.split("]")[0]
        // console.log(ms);
     }
      // console.log(ms);
      // 组合
      let time = m+parseInt(s)+ms/1000
      // console.log(time);
      // 获取每个时间对应的歌词
      let msg = item.split("]")[1]
      // console.log(msg);
      let msgObj = {
        time:time,
        msg:msg
      }
      if(msg!=" "&&msg!=""){
        newLyric.push(msgObj)
      }
    })
    console.log(newLyric);
    this.setData({
      lyric:newLyric
    })
  }
})